Implement RFC 3678: Final trait methods#151783
Implement RFC 3678: Final trait methods#151783rust-bors[bot] merged 7 commits intorust-lang:mainfrom
Conversation
|
Some changes occurred in compiler/rustc_builtin_macros/src/autodiff.rs cc @ZuseZ4 Some changes occurred in src/tools/rustfmt cc @rust-lang/rustfmt Some changes occurred in src/tools/clippy cc @rust-lang/clippy |
|
r? @fee1-dead rustbot has assigned @fee1-dead. Use |
|
Could you mark errs as a coauthor in all 6 commits, I think that's only fair. Thanks! :) Namely: |
fe8e71f to
f0df197
Compare
|
@fmease Done. Thanks for the reminder! :) |
Does this implement the requirement that final methods don't prevent a trait from being dyn-compatible? |
This comment was marked as outdated.
This comment was marked as outdated.
ca5e458 to
a0707ab
Compare
a0707ab to
5c978e5
Compare
Implemented now :). Also, updated the PR description. |
This comment has been minimized.
This comment has been minimized.
5c978e5 to
05c342d
Compare
This comment has been minimized.
This comment has been minimized.
05c342d to
a630df6
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Michael Goulet <michael@errs.io>
897ebf0 to
526d9ed
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
Co-authored-by: Michael Goulet <michael@errs.io>
Co-authored-by: Michael Goulet <michael@errs.io>
Co-authored-by: Michael Goulet <michael@errs.io>
Co-authored-by: Michael Goulet <michael@errs.io>
Co-authored-by: Michael Goulet <michael@errs.io>
526d9ed to
8c77b6c
Compare
| enum AllowDefault { | ||
| Yes, | ||
| No, | ||
| } | ||
|
|
||
| impl AllowDefault { | ||
| fn when(b: bool) -> Self { | ||
| if b { Self::Yes } else { Self::No } | ||
| } | ||
| } | ||
|
|
||
| enum AllowFinal { | ||
| Yes, | ||
| No, | ||
| } | ||
|
|
||
| impl AllowFinal { | ||
| fn when(b: bool) -> Self { | ||
| if b { Self::Yes } else { Self::No } | ||
| } | ||
| } |
There was a problem hiding this comment.
small suggestion:
struct AllowDefault(pub bool);
struct AllowFinal(pub bool);There was a problem hiding this comment.
I think these two styles are not really much different. I like the enum because it is more verbose when you check: if let AllowFinal::Yes = allow_final vs if allow_final.0.
| enum AllowDefault { | ||
| Yes, | ||
| No, | ||
| } | ||
|
|
||
| impl AllowDefault { | ||
| fn when(b: bool) -> Self { | ||
| if b { Self::Yes } else { Self::No } | ||
| } | ||
| } | ||
|
|
||
| enum AllowFinal { | ||
| Yes, | ||
| No, | ||
| } | ||
|
|
||
| impl AllowFinal { | ||
| fn when(b: bool) -> Self { | ||
| if b { Self::Yes } else { Self::No } | ||
| } | ||
| } |
There was a problem hiding this comment.
I think these two styles are not really much different. I like the enum because it is more verbose when you check: if let AllowFinal::Yes = allow_final vs if allow_final.0.
|
LGTM, can iterate on it later |
Rollup of 11 pull requests Successful merges: - #152700 (miri subtree update) - #152715 (`rust-analyzer` subtree update) - #151783 (Implement RFC 3678: Final trait methods) - #152512 (core: Implement feature `float_exact_integer_constants`) - #152661 (Avoid ICE in From/TryFrom diagnostic under -Znext-solver) - #152703 (Remove `rustc_query_system`) - #152206 (misc doc improvements) - #152664 (Fix mis-constructed `file_span` when generating scraped examples) - #152698 (Suppress unstable-trait notes under `-Zforce-unstable-if-unmarked`) - #152727 (`probe_op` silence ambiguity errors if tainted) - #152728 (Port #![default_lib_allocator] to the new attribute parser)
Rollup merge of #151783 - mu001999-contrib:impl/final-method, r=fee1-dead Implement RFC 3678: Final trait methods Tracking: #131179 This PR is based on #130802, with some minor changes and conflict resolution. Futhermore, this PR excludes final methods from the vtable of a dyn Trait. And some excerpt from the original PR description: > Implements the surface part of rust-lang/rfcs#3678. > > I'm using the word "method" in the title, but in the diagnostics and the feature gate I used "associated function", since that's more accurate. cc @joshtriplett
| /// Allows the use of `#[ffi_pure]` on foreign functions. | ||
| (unstable, ffi_pure, "1.45.0", Some(58329)), | ||
| /// Allows marking trait functions as `final` to prevent overriding impls | ||
| (unstable, final_associated_functions, "CURRENT_RUSTC_VERSION", Some(1)), |
There was a problem hiding this comment.
| (unstable, final_associated_functions, "CURRENT_RUSTC_VERSION", Some(1)), | |
| (unstable, final_associated_functions, "CURRENT_RUSTC_VERSION", Some(131179)), |
This was never filled out. Could sb send a patch updating this number (+ rebless the relevant tests)? Thanks in advance.
… r=fmease Update tracking issue number for final_associated_functions From rust-lang#151783 (comment)
… r=fmease Update tracking issue number for final_associated_functions From rust-lang#151783 (comment)
Rollup of 11 pull requests Successful merges: - rust-lang/rust#152700 (miri subtree update) - rust-lang/rust#152715 (`rust-analyzer` subtree update) - rust-lang/rust#151783 (Implement RFC 3678: Final trait methods) - rust-lang/rust#152512 (core: Implement feature `float_exact_integer_constants`) - rust-lang/rust#152661 (Avoid ICE in From/TryFrom diagnostic under -Znext-solver) - rust-lang/rust#152703 (Remove `rustc_query_system`) - rust-lang/rust#152206 (misc doc improvements) - rust-lang/rust#152664 (Fix mis-constructed `file_span` when generating scraped examples) - rust-lang/rust#152698 (Suppress unstable-trait notes under `-Zforce-unstable-if-unmarked`) - rust-lang/rust#152727 (`probe_op` silence ambiguity errors if tainted) - rust-lang/rust#152728 (Port #![default_lib_allocator] to the new attribute parser)
… r=fmease Update tracking issue number for final_associated_functions From rust-lang#151783 (comment)
Tracking: #131179
This PR is based on #130802, with some minor changes and conflict resolution.
Futhermore, this PR excludes final methods from the vtable of a dyn Trait.
And some excerpt from the original PR description:
cc @joshtriplett